﻿/**********************************************************
 ●项目：Smartkernel
 ●公司：智能核心信息技术研发中心
 ●作者：曹艳白
 ●邮箱：caoyanbai@gmail.com
 ●创建：2008-08-10
**********************************************************/
using System;
using System.Text;

namespace Smartkernel
{
    /// <summary>
    /// 64位编码操作类，实现64位编码、解码以及其他相关操作
    /// </summary>
    public static class SmartBase64
    {
        /// <summary>
        /// 对输入字符串进行64位编码，并返回编码之后的字符串形式
        /// </summary>
        /// <param name="input">待编码的字符串，空字符的编码还是空字符。空格的编码格式不是空字符。</param>
        /// <returns>编码之后的字符串</returns>
        public static string Encode(string input)
        {
            return Convert.ToBase64String(Encoding.Default.GetBytes(input));
        }
        /// <summary>
        /// 对输入字符串进行64位编码，并返回编码之后的字符串形式
        /// </summary>
        /// <param name="input">待编码的字符串，空字符的编码还是空字符。空格的编码格式不是空字符。</param>
        /// <param name="encoding">编码类型</param>
        /// <returns>编码之后的字符串</returns>
        public static string Encode(string input, Encoding encoding)
        {
            return Convert.ToBase64String(encoding.GetBytes(input));
        }
        /// <summary>
        /// 对64位编码格式的字符串进行解码，并返回解码之后的格式
        /// </summary>
        /// <param name="input">待解码的64位编码格式字符串，如果输入的字符串不是合法的64位编码格式，将引发异常。空格和空字符的解码都是空字符</param>
        /// <returns>解码之后的字符串</returns>
        public static string Decode(string input)
        {
            byte[] buffer = Convert.FromBase64String(input);

            return Encoding.Default.GetString(buffer);
        }
        /// <summary>
        /// 对64位编码格式的字符串进行解码，并返回解码之后的格式
        /// </summary>
        /// <param name="input">待解码的64位编码格式字符串，如果输入的字符串不是合法的64位编码格式，将引发异常。空格和空字符的解码都是空字符</param>
        /// <param name="encoding">编码类型</param>
        /// <returns>解码之后的字符串</returns>
        public static string Decode(string input,Encoding encoding)
        {
            byte[] buffer = Convert.FromBase64String(input);

            return encoding.GetString(buffer);
        }
        /// <summary>
        /// 检查是不是合法的64位编码格式的字符串
        /// </summary>
        /// <param name="input">待检查的字符串。空字符串和空格都是合法的64位编码</param>
        /// <returns></returns>
        public static bool IsBase64(string input)
        {
            bool isBase64 = true;
            try
            {
                Convert.FromBase64String(input);
            }
            catch (FormatException)
            {
                isBase64 = false;
            }
            return isBase64;
        }
    }
}
